import router from './router'
import store from './store'
import { isRelogin } from '@/utils/request'

// 白名单路由，无需登录即可访问
const whiteList = ['/login', '/forgot-password', '/register', '/404']

// 路由守卫
router.beforeEach((to, from, next) => {
    const token = store.getters.token

    // 对于404页面的处理
    if (to.path === '/404') {
        next()
        return
    }

    // 对于不存在的路由，直接让路由配置中的通配符处理
    if (to.matched.length === 0) {
        next()
        return
    }

    if (token) {
        /* has token*/
        if (to.path === '/login') {
            next({ path: '/' })
        } else {
            isRelogin.show = true
            // 判断当前用户是否已拉取完user_info信息
            store.dispatch('getInfo').then(() => {
                isRelogin.show = false
                next()
            }).catch(err => {
                console.log(err)
                store.dispatch('LogOut').then(() => {
                    // 登出后重定向到登录页，而不是首页
                    next({ path: '/login', replace: true })
                })
            })
        }
    } else {
        console.log("没有token：" + to.path)
        // 没有token
        if (whiteList.indexOf(to.path) !== -1) {
            // 在免登录白名单，直接进入
            console.log("在免登录白名单，直接进入")
            next()
        } else {
            console.log("重定向到登录页")
            // 使用对象形式进行路由跳转，避免URL参数被转义
            // 防止循环重定向：检查是否已经在重定向过程中
            // 如果来源是登录页或者目标是登录页的重定向，则取消导航
            if (from.path === '/login' || (from.path === '/' && from.redirectedFrom)) {
                next(false) // 取消当前的导航
                return
            }

            // 使用replace: true，避免在导航历史中留下重定向记录
            try {
                next({
                    path: '/login',
                    query: {
                        redirect: to.fullPath
                    },
                    replace: true
                }) // 否则全部重定向到登录页
            } catch (e) {
                console.error('导航错误:', e)
                next('/login') // 简化的重定向，避免复杂参数可能导致的问题
            }
        }
    }
})
